package controller;

import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.w3c.dom.Element;
import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Edwin
 */
public class XML_Xerces {

    private Document dom;

    public XML_Xerces(String fileName) {
        createFileXml(fileName);
    }

    public void createFileXml(String fileName) {
        // 1. Obteher el objeto DocumentBuilderFactory
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            // 2. Usar DocumentBuilderFactory para crear un DocumentBuilder
            DocumentBuilder db = dbf.newDocumentBuilder();
            // 3. Parsear a partir de un archivo
            dom = db.parse(fileName);
        } catch (ParserConfigurationException pce) {
            pce.printStackTrace();
        } catch (SAXException ex) {
            Logger.getLogger(XML_Xerces.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(XML_Xerces.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    //Parsea el documento XML y extrae los datos
    public String parseDocument() {
        // 1. Obtener el documento raiz
        Element docEle = dom.getDocumentElement();
        String data = "";
        // 2. Obtener un nodelist de elementos <descarga>
        NodeList nl = docEle.getElementsByTagName("route");
        if (nl != null && nl.getLength() > 0) {
            for (int i = 0; i < nl.getLength(); i++) {
                if (!data.equals("")) {
                    data += ", ";
                }
                Element element = (Element) nl.item(i);
                data += getData(element);
            }
        }
        return data;
    }

    public String getData(Element element) {
        String temp = "";
        temp += "{'id' : " + Integer.parseInt(element.getAttribute("id")) + ", ";
        temp += "'duration' : " + Integer.parseInt(element.getAttribute("duration")) + ", ";
        temp += "'source' : '" + element.getAttribute("source") + "', ";
        temp += "'destination' : '" + element.getAttribute("destination") + "', ";
        temp += "'available' : '" + Boolean.valueOf(element.getAttribute("available")) + "'}";

        return temp;
    }

    //Devuelve un valor entero del elemento recibido
    private int obtenerEntero(Element elemento, String nombreEtiqueta) {
        return Integer.parseInt(obtenerTexto(elemento, nombreEtiqueta));
    }

    //Devuelve los datos del elemento recibido
    private String obtenerTexto(Element elemento, String nombreEtiqueta) {
        String texto = null;
        NodeList nl = elemento.getElementsByTagName(nombreEtiqueta);
        if (nl != null && nl.getLength() > 0) {
            Element el = (Element) nl.item(0);
            texto = el.getFirstChild().getNodeValue();
        }
        return texto;
    }
}
